// 引入核心库
import router from "@/router";
import axios from "axios";
//通过querystring去进行转化
import qsString from 'querystring'

//设置基础地址
let baseUrl = "/api";

//拦截器之请求拦截器
axios.interceptors.request.use((req) => {
  //要给所有的接口添加token 。除了登录（？为什么===>因为token是登录返回的）
  // console.log(req,'请求');
  if(req.url != '/api/userlogin'){
    //不是登录就要添加请求头
    req.headers.authorization= sessionStorage.getItem('userinfo')?JSON.parse(sessionStorage.getItem('userinfo')).token:null
  }
  return req;
});

//拦截器之响应拦截器
axios.interceptors.response.use((res) => {
  // 全局拦截错误
  if(res.data.msg=='请设置请求头,并携带验证字符串'){
    alert(res.data.msg)
    //跳转到登录页
    router.push('/login')
  }
  if(res.data.msg=='登录已过期或访问权限受限'){
    alert(res.data.msg)
    //跳转到登录页
    router.push('/login')
  }
  return res.data;
});
/* 
    全局封装get 方法
    url 地址
    params参数
*/

export const get = (url, params = {}) => {
  return new Promise((resolve, reject) => {
    //调用axios中的get方法
    axios
      .get(baseUrl + url, {
        params,
      })
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};
/* 
封装post方法
    url 地址
    params参数
    isFile 是否含有上传文件
*/
/* 
表单提交（post方式比较特殊）
content-type

值	描述
application/x-www-form-urlencoded	在发送前编码所有字符（默认）

multipart/form-data	
不对字符编码。
在使用包含文件上传控件的表单时，必须使用该值。

*/
export const post = (url, params = {}, isFile = false) => {
    let data = {}
    if(isFile){
        data = new FormData()
        for(let i in params){
            data.append(i,params[i])
        }
    }else{
         data = qsString.stringify(params)
        // data=params
    }
  return new Promise((resolve, reject) => {
    axios
      .post(baseUrl + url, data)
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};